home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / DEMO / LOCALMOD.M < prev    next >
Encoding:
Modula Definition  |  1991-04-09  |  3.2 KB  |  117 lines

  1.  
  2. (*
  3.  * Dies Modul hat keine Funktion. Es demonstriert lediglich, wie der
  4.  * Megamax-Compiler den IMPORT & EXPORT bei lokalen Modulen behandelt.
  5.  *)
  6.  
  7. (*
  8.  * Zuerst das Definitionsmodul
  9.  * ---------------------------
  10.  *)
  11.  
  12. DEFINITION MODULE LocalModules;
  13.  
  14.   EXPORT ExportProc1, ExportProc2;
  15.     (*
  16.      * Export-Listen sind auch weiterhin möglich, auch QUALIFIED.
  17.      *)
  18.  
  19.   PROCEDURE ExportProc1;  (* Sie wird in einem lokalen Modul implementiert *)
  20.  
  21.   PROCEDURE ExportProc2;  (* Sie wird in einem lokalen Modul implementiert *)
  22.  
  23. END LocalModules.
  24.  
  25. (*
  26.  * Jetzt das Implementationsmodul
  27.  * ------------------------------
  28.  *)
  29.  
  30. IMPLEMENTATION MODULE LocalModules;
  31.  
  32. IMPORT InOut;
  33.  
  34. TYPE GlobalTyp = CARDINAL;
  35.  
  36. PROCEDURE ProcFromLocal3;       (* FORWARD-Deklaration, um diese Proc schon *)
  37.   FORWARD;                      (* vor ihrer Impl. im 3. Modul zu benutzen. *)
  38.  
  39. (* 1. lokales Modul *)
  40.  
  41. MODULE Local1;
  42.  
  43.   IMPORT GlobalTyp;             (* ist nun auch hier sichtbar *)
  44.   
  45.   IMPORT ProcFromLocal3;        (* kommt aus 3. lok. Modul - FORWARD-Dekl. *)
  46.  
  47.   EXPORT Local1Typ, ExportProc1;(* werden außen sichtbar *)
  48.  
  49.   TYPE Local1Typ = INTEGER;
  50.  
  51.   VAR v: GlobalTyp;
  52.  
  53.   PROCEDURE ExportProc1;        (* Sie wird global (im Def-Modul) exportiert *)
  54.     BEGIN (* ...*) END ExportProc1;
  55.  
  56.   END Local1;
  57.  
  58. (* 2. lokales Modul *)
  59.  
  60. MODULE Local2;
  61.  
  62.   IMPORT Local1Typ;             (* ist nun auch hier sichtbar *)
  63.   (*
  64.    * ein "IMPORT Local1" brächte nichts, da Local1
  65.    * nicht qualifiziert exportiert wird.
  66.    *)
  67.  
  68.   IMPORT ExportProc2;
  69.   (*
  70.    * statt Ex- ist auch Import des im Def-Modul exportierten Bezeichners
  71.    * möglich, um ihn hier im lokalen Modul zu implementieren. Allerdings
  72.    * ist der Export die bei anderen Compilern üblichere Art, deshalb sollten
  73.    * Sie den Export (wie im Modul 'Local1') dem Import vorziehen.
  74.    *)
  75.  
  76.   EXPORT QUALIFIED Local2Typ;   (* wird außen nur qualifiziert sichtbar *)
  77.  
  78.   TYPE Local2Typ = CHAR;
  79.  
  80.   VAR v: Local1Typ;             (* unqualifizierter Zugriff *)
  81.  
  82.   PROCEDURE ExportProc2;        (* Sie wird global (im Def-Modul) exportiert *)
  83.     BEGIN (* ...*) END ExportProc2;
  84.  
  85.   END Local2;
  86.  
  87. (* 3. lokales Modul *)
  88.  
  89. MODULE Local3;
  90.   
  91.   FROM Local2 IMPORT Local2Typ; (* ist möglich, weil qualif. Export *)
  92.   IMPORT Local2;                (* auch nur möglich wegen qualif. Export *)
  93.   (*
  94.    * Beide obigen Importe entsprechen dem aus externen Definition-Modulen.
  95.    * Denn in externen Def-Modulen werden die Bezeichner alle automatisch
  96.    * qualifiziert exportiert, wie dies explizit bei 'Local2' geschieht.
  97.    *)
  98.  
  99.   FROM InOut IMPORT WriteString;(* Natürlich geht's auch bei externen Modulen*)
  100.  
  101.   EXPORT ProcFromLocal3;        (* Wurde bereits vorher benutzt (FORWARD) *)
  102.  
  103.   VAR v1: Local2Typ;            (* unqualifizierter Zugriff von 1. Import *)
  104.       v2: Local2.Local2Typ;     (* qualifizierter Zugriff von 2. Import *)
  105.  
  106.   PROCEDURE ProcFromLocal3;
  107.     BEGIN (* ... *) END ProcFromLocal3;
  108.  
  109.   END Local3;
  110.  
  111. (* wieder globales Modul *)
  112.  
  113. VAR v1: Local1Typ;              (* nur unqualifiziert ansprechbar *)
  114.     v2: Local2.Local2Typ;       (* nur qualifiziert ansprechbar *)
  115.  
  116. END LocalModules.
  117.